Voide 34:怒肝 3 个晚上,用 AI+Anki 做雅思口语模考话题卡
准备 9 月新题的口语语料库的时候,发现,虽然题目很多,市面上的资料也很充足,但是没有一个 App 或者资料是模拟雅思口语全流程的方式来出题的,都是把 Part 1 的所有题目汇总在一个文档,Part 2&3 汇总在一个文档。少量模拟 P1+P2+P3 完整考试流程的 App,这种功能都要付费。
但我也不需要外教或者 AI 评分,我只想走这个流程,刷刷题,适应一下话题切换的氛围,如果有答不上来的可以看下参考思路。
于是突发奇想,为什么我不能自己做一个?
一开始想着做成网站,但仔细思考了一番……想起这些话题池大概率涉及到了数据存储,而按照历史经验,要让 AI 协助我处理数据存储又必然会遇到一些难解的 Bug,遂放弃。
又想起 Anki 就是一个很好的工具。一张卡就是一套题,准备 N 套题,刷完一张卡切换下一张就可以了。而且 Anki 是可以用代码来自定义卡片模式的,于是怒肝了 3 个晚上,终于是做成了自己比较满意的样子,先看效果:
需求确认
这个工具整体比较简单,只要模拟雅思口语考试的流程就可以了。
流程分成四步:
- 固定 3 个开场问题(名字、家乡、学生/工作),身份题会再追问 1–2 个;
- 随机抽取一个 Part 1 话题,提 2–3 个问题;
- 随机抽取一个 Part 2 话题;
- 根据 Part 2,进入 Part 3,追问 2–3 个相关问题。
卡片模板也很简单:
- 正面显示问题,底部有「提示」和「下一题」按钮;
- 到第 3 题时会出现「学生/工作」分支选择;
- 提示内容默认隐藏,点按钮才显示;
- 全部问题完成后,会出现「完成」,再切换到下一张卡。
为了方便修改,我希望题目的数据是存储 CSV 格式的表格里,内容都制作好后,再导入 Anki。
CSV 的表格一行就是一张卡片,因为我这里卡片就是一整套题,所以会以 Part 2 的数量设计卡片的数量,一共 77 套题,即 77 行数据。每行的 Part 1 话题和问题都是一样的,利用规则随机筛选,Part 2&3 每行不同,这样一来就不会出现感觉每套题的流程都背熟了的情况。
AI 开发
把需求梳理清楚后,就可以直接交给 AI 来写模板代码,处理 CSV 的题目数据了。这里我做的事情其实很简单:
我直接把刚刚的需求丢给 AI,然后请它生成两个东西:
一份是 Anki 的前端模板代码,并告诉它整个模板的配色应该选择什么样的风格(这里我直接找了一些色板给它参考)。
另一份是 CSV 文件模板。我告诉 AI:题库会整理成一个 CSV 文件,每一行是一套完整的模拟考试。列里包含固定开场题、Study/Work 分支、Part1 话题和问题、Part2 题目、以及 Part3 的追问、3Part 问题对应的提示,以及随机抽题数量。让它生成一个 CSV 表头模板。
拿到这个表头模板后,可以再把题目复制给 AI 让它来填充表格,以免自己需要浪费太多时间复制粘贴。
当然,过程中少不了调试和迭代,比如发现模板代码中的字段需要包含 CSV 所有表头信息,我希望这个过程也能自动化,于是让 AI 帮我调用 AnkiConnect 插件,借用 Python 脚本来导入字段数据。
等等等等,这个调试的过程是最耗费心力的,中间一度想放弃了😭
结尾
做完之后再回顾,才发现,这个小工具看似简单,其实中间细节一堆:按钮逻辑要顺畅、CSV 里的换行要识别、模板和数据要对齐……一旦一开始需求没想清楚,就只能边做边改。最崩溃的是,有时候 AI 把原本对的地方给改坏了,只能一点点调回去,整个人都想摆烂🆘。
不过好在坚持下来了。大概花了 3 个晚上,反复调试了二十来个小时,最后总算做出了一个能用、也顺手的版本。
现在的好处是,以后再遇到新题库,我只要更新 CSV 就行,不用再从头折腾一遍,而且结合 Anki 自带的录音和计时功能,就能当成自己的免费口语训练工具了(但好像花了很多 token……)。